package num1573;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author : DuJiabao
 * @Project : sword-finger-offer
 * @Time : 2021/4/10 10:03
 * @Desc :
 */
class Solution {
  public int numWays(String s) {
    List<Integer> location = new ArrayList<>();  // 用来记录所有包含`1`的下标
    long count = 0;  // 1的个数
    // 遍历所有位置，找出所有1的下标以及个数总和
    for (int i = 0; i < s.length(); i++) {
      if ('1' == (s.charAt(i))) {
        location.add(i);
        count++;
      }
    }
    // 情况一：不是3的倍数，直接返回0
    if (count % 3 != 0) return 0;
    // 情况二：如果全是0，那就返回组合的结果
    if (count == 0) {
      long n = s.length();
      return (int) (((n - 1) * (n - 2) / 2) % 1000000007);
    }
    // 情况三：
    int middle3 = (int) (count / 3);  // 返回每段需要包含1的个数
    long firstSpace = (location.get(middle3) - location.get(middle3 - 1));  // 第一段和第二段之间，0的个数
    long secondSpace = (location.get(2 * middle3) - location.get(2 * middle3 - 1));// 第二段和第三段之间，0的个数
    return (int) ((firstSpace * secondSpace) % 1000000007L);  // 组合结果，返回
  }

  public static void main(String[] args) {
    int res = new Solution().numWays("10101");
    System.out.println(res);
  }
}
